/*
 * consola.h
 *
 *  Created on: 28/09/2011
 *      Author: utn_so
 */

#include "../../headers/GlobalHeader.h"

t_stream *PedidoINFO_serializer(protocoloINFO *pedido){

	char *data = malloc(sizeof(pedido->cabecera));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

t_stream *PedidoCLEAN_serializer(protocoloCLEAN *pedido){

	char *data = malloc(sizeof(pedido->cabecera)+sizeof(pedido->payload));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.sectorInicial, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.sectorFinal, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

t_stream *PedidoTRACE1_serializer(protocoloTRACE1 *pedido){

	char *data = malloc(sizeof(pedido->cabecera)+sizeof(pedido->payload));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s1, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

t_stream *PedidoTRACE2_serializer(protocoloTRACE2 *pedido){

	char *data = malloc(sizeof(pedido->cabecera)+sizeof(pedido->payload));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s1, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s2, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

t_stream *PedidoTRACE3_serializer(protocoloTRACE3 *pedido){

	char *data = malloc(sizeof(pedido->cabecera)+sizeof(pedido->payload));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s1, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s2, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s3, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

t_stream *PedidoTRACE4_serializer(protocoloTRACE4 *pedido){

	char *data = malloc(sizeof(pedido->cabecera)+sizeof(pedido->payload));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s1, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s2, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s3, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s4, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

t_stream *PedidoTRACE5_serializer(protocoloTRACE5 *pedido){

	char *data = malloc(sizeof(pedido->cabecera)+sizeof(pedido->payload));
	t_stream *stream = malloc(sizeof(t_stream));
	int32_t offset, tmp_size = 0;

	memcpy(data, &pedido->cabecera.type, tmp_size = sizeof(int32_t));

	offset = tmp_size;
	memcpy(data+offset, &pedido->cabecera.payloadlength, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s1, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s2, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s3, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s4, tmp_size = sizeof(int32_t));

	offset += tmp_size;
	memcpy(data+offset, &pedido->payload.s5, tmp_size = sizeof(int32_t));

	stream->length = offset + tmp_size;
	stream->data = data;

	return stream;
}

